Individual application programs typically run on a computer as a process administered by an operating system. A program can call the operating system (OS) to allocate memory. Sometimes, the program that makes the request to the OS for a memory allocation is responsible for freeing the memory it has requested. Alternatively, a garbage collector or garbage collection service can free unused memory. Repeatedly allocating memory that is not freed (referred to as a memory leak) can lead to abnormal program termination. Hence finding and fixing code that leaks memory can be advantageous. While tools that track memory allocations in a given process are known, known tools do not typically identify allocations that are not freed or the actor that allocated the unfreed allocations. Moreover, some tools are limited to a single type of memory and/or provide incomplete or partial information about the allocations.